package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"lin6xcom/src/models"
	"lin6xcom/src/utils"
)

// 分类业务相关控制
type CategoryController struct {
}

// 增加分类--------
func (CategoryController) AddCategory(ctx *gin.Context) {
	category := &models.Category{}
	category.CategoryId = uint(uuid.New().ID())
	err := ctx.BindJSON(&category)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "参数错误",
		})
		fmt.Println(err)
		return
	}

	db := utils.LinkDB()
	_, err1 := db.Insert(category)
	if err1 != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "添加失败",
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "添加成功",
	})
}

// 删除分类--------
func (CategoryController) DeleteCategory(ctx *gin.Context) {
	categoryId, _ := ctx.GetQuery("categoryId")
	db := utils.LinkDB()
	_, err := db.Where("category_id = ?", categoryId).Delete(&models.Category{})
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "删除失败",
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "删除成功",
	})
}

// 更新分类--------
func (CategoryController) UpdateCategory(ctx *gin.Context) {
	category := &models.Category{}
	err := ctx.BindJSON(&category)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "参数错误",
		})
		fmt.Println(err)
		return
	}

	db := utils.LinkDB()
	_, err1 := db.Where("category_id = ?", category.CategoryId).Update(category)
	if err1 != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "更新失败",
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "更新成功",
	})
}

// 根据分类id查询单个分类--------
func (CategoryController) GetCategory(ctx *gin.Context) {
	categoryId, _ := ctx.GetQuery("categoryId")
	category := models.Category{}
	db := utils.LinkDB()
	get, err := db.Where("category_id = ?", categoryId).Get(&category)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "查询失败",
		})
		fmt.Println(err)
		return
	}
	if !get {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "查询失败,分类不存在或已失效",
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "查询成功",
		"data": category,
	})

}

// 查询所有分类--------
func (CategoryController) GetAllCategory(ctx *gin.Context) {
	db := utils.LinkDB()
	categories := []models.Category{}
	if err := db.Find(&categories); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "查询失败",
		})
		fmt.Println(err)
		return
	}
	fmt.Println(categories)
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "查询成功",
		"data": categories,
	})
}
